import MessageItem = require('./MessageItem');
export  = Messager;

/**
 *
 * @author 
 *
 */
// 消息管理器
class Messager {
    private map={}; // type - []  的对象
    public register (type, func,scope){
        var arr = this.map[type];
        if(!arr){ 
            this.map[type]=new Array<MessageItem>();
        }
        
        var item = new MessageItem();
        item.setFunc(func);
        item.setScope(scope);
        this.map[type].push(item);
    }
    public fireEvent= function(type,...p:any[]){
        var arr:Array<MessageItem> = this.map[type];
        for(var i in arr){
            var item=arr[i];
            if(item) {
                var len=p.length;
                switch(len) {
                    case 0:
                        item.getFunc().call(item.getScope());
                        break;
                    case 1:
                        item.getFunc().call(item.getScope(),p[0]);
                        break;
                    case 2:
                        item.getFunc().call(item.getScope(),p[0],p[1]);
                        break;
                    case 3:
                        item.getFunc().call(item.getScope(),p[0],p[1],p[2]);
                        break;
                    case 4:
                        item.getFunc().call(item.getScope(),p[0],p[1],p[2],p[3]);
                        break;
                    case 5:
                        item.getFunc().call(item.getScope(),p[0],p[1],p[2],p[3],p[4]);
                        break;
                    case 6:
                        item.getFunc().call(item.getScope(),p[0],p[1],p[2],p[3],p[4],p[5]);
                        break;
                    case 7:
                        item.getFunc().call(item.getScope(),p[0],p[1],p[2],p[3],p[4],p[5],p[6]);
                        break;
                    case 8:
                        item.getFunc().call(item.getScope(),p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]);
                        break;
                    case 9:
                        item.getFunc().call(item.getScope(),p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],p[8]);
                        break;
                }

            }
        }
    }	
    
    
	public constructor() {
	}
//SJG_MARK_APPEND--------------------


}//SJG_MARK_END-------------------------